package com.juc.volatiles;

import java.util.concurrent.TimeUnit;

/**
 * @Author Zan
 * @Create 2024/5/9 15:55
 * @ClassName : VolatileSeeDemo
 * @Description :
 *          使用：作为一个布尔状态标志，用于指示发生了一个重要的一次性事件，例如完成初始化或任务结束
 *          理由：状态标志并不依赖于程序内任何其他状态，且通常只有一种状态转换
 *          例子：判断业务是否结束
 */
public class VolatileSeeDemo {

    // 没有volatile就没有可见性，别的线程就不知道你这个线程修改了值
    volatile static boolean flag = true;

    public static void main(String[] args) {
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "\t ---- come in");
            while (flag) {

            }
            System.out.println(Thread.currentThread().getName() + "\t ---- flag被设置为false，程序停止");
        }, "t1").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        flag = false;
        System.out.println(Thread.currentThread().getName() + "\t ---- 修改完成flag：" + flag);

    }
}
